Ruby 支援一套豐富的運算符。大多數運算符實際上是方法的呼叫,運算符是所有算符的總稱,其底下又可以細分為算術運算符、比較運算符、邏輯運算符….等,文章只會紀錄幾個常用的運算符與特殊規則。
假設變數 a = 10, b = 3(前四個用法較常見,因此省略)
運算符 | 描述 | 舉例 |
---|---|---|
+ | 加法 | — |
_ | 減法 | — |
* | 乘法 | — |
/ | 除法 | — |
% | 餘數 | a%b 得到 1 |
** | 指數 | a**b 得到 1000 |
假設變數 a = 10, b = 20
運算符 | 描述 | 舉例 |
---|---|---|
== | 檢查兩數值是否相等,相等回傳 true | (a == b) 不會回傳 true |
! = | 檢查兩數值是否相等,不相等回傳 true | (a != b) 回傳 true. |
> | 檢查左數值是否大於右數值,大於回傳 true | (a > b) 不會回傳 true. |
< | 檢查左數值是否小於右數值,小於回傳 true | (a < b) 回傳 true. |
> = | 檢查左數值是否大於等於右數值,大於回傳 true | (a >= b) 不會回傳 true. |
< = | 檢查左數值是否小於等於右數值,小於回傳 true | (a <= b) 回傳 true. |
< = > | 第1個操作數等於第2個運算元則傳回 0;第1個運算元大於第2個運算元則回傳 1;第1個運算元小於第2個運算元則回傳 -1 | (a <=> b) 回傳 -1. |
=== | case 語句的 when 子句內的條件相等,回傳true | (1...10) === 5 回傳 true |
.eql? | 接收者和参数具有相同的類型和值,回傳 true | 1 == 1.0 returns true, but 1.eql?(1.0) is false. |
equal? | 接收者和參數具有相同的物件 ID,回傳 true。 | 如果 aObj 是 bObj 的 copy,aObj == bObj 回傳 true;a.equal?bObj 回傳 false;a.equal?aObj 回傳 true |
運算符 | 描述 | 舉例 |
---|---|---|
and | 檢查兩數值是否為真,兩數值皆為真,回傳true | (a and b) 回傳 true. |
or | 檢查兩數值任一不為真,任一數值為真,回傳 true | (a or b) 回傳 true. |
&& | 檢查兩數值是否為真,兩數值皆為真,回傳true | (a&& b) 回傳 true. |
|| | 檢查兩數值任一不為真,任一數值為真,回傳 true | (a || b) 回傳 true. |
! | 逆轉操作時的邏輯狀態。如果條件為真則使其為假。 | !(a && b) 回傳 false |
not | 逆轉操作時的邏輯狀態。如果條件為真則使其為假。 | not(a && b) 回傳 false |
可以使用符號(&&, ||, !)或文字(and, or, not),但符號有較高的優先權(precedence)
當 and 遇上 =
def trip_schedule?(trip1 = nil, trip2 = nil)
@my_trip = trip1 and trip2
end
trip_schedule?('Europe', 'America' ) # => "租借女友"
@my_trip # => "Europe"
trip_schedule?('Europe') # => nil
@my_trip # => "Europe"
由於=
優先權大於and
,所以兩個都只會印出"Europe"
參考資料: